package com.ruoyi.gpt.queue;

import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.redis.QueueUtils;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.gpt.constants.QueueConstants;
import com.ruoyi.gpt.domain.vo.ChatTokenVo;
import com.ruoyi.gpt.service.IChatTokenService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.util.List;

@Component
@AllArgsConstructor
@Slf4j
public class ApiKeysQueue {

    /**
     * 从数据库获取token列表，存入队列
     */
    @PostConstruct
    public static void init(){
        // 用之后销毁，否则一直存在
        String queueName = QueueConstants.apiKeys;
        // 删除队列里面的 apiKeys
        QueueUtils.destroyQueue(queueName);
        // 删除队列里面的 request 在添加apikey时有可能会丢失请求
        // QueueUtils.destroyQueue(QueueConstants.request);
        log.info("清空，通道：{}",queueName);
        List<ChatTokenVo> chatTokenVoList = SpringUtils.getBean(IChatTokenService.class).queryListByIsUsed();
        for (ChatTokenVo chatTokenVo : chatTokenVoList) {
            String token = chatTokenVo.getToken();
            if(StringUtils.isNotBlank(token)){
                if(QueueUtils.addQueueObject(queueName,token)){
                    log.info("通道:{},推入队列：{}",queueName,token);
                }else{
                    log.info("通道:{},推入队列：{},推入失败",queueName,token);
                }
            }
        }

    }
}
